#!/bin/sh

# config.bfd
# Convert a canonical host type into a BFD host type.
# Call with canonical name as the argument.
# Echos the result.
# If second argument is _, echoes whether underscores are stripped.

canon="$1"
cpu=`echo $canon | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'`

# The binutils c++filt program wants to know whether underscores are
# stripped or not.  It uses this information to choose a default.
# This information is duplicated in the symbol_leading_char field of
# the BFD target vector, but c++filt does not deal with object files
# and is not linked against libbfd.a.  It is not terribly important
# that c++filt get this right; it is just convenient.
strip_underscore=no

# WHEN ADDING ENTRIES TO THIS MATRIX:
#  Make sure that the left side always has two dashes.  Otherwise you
#  can get spurious matches.  Even for unambiguous cases, do this as a
#  convention, else the table becomes a real mess to understand and maintain.

case "${canon}" in
  alpha-*-netware*)	bfd_name=alpha-nlm ;;
  alpha-*-*)		bfd_name=alphaosf ;;
  arm-*-riscix*)	bfd_name=riscix ;;
  a29k-*-ebmon*)	bfd_name=a29k-coff strip_underscore=yes ;;
  a29k-*-udi*)		bfd_name=a29k-coff strip_underscore=yes ;;
  a29k-*-aout*)		bfd_name=a29k-aout strip_underscore=yes ;;
  a29k-*-coff*)		bfd_name=a29k-coff strip_underscore=yes ;;
  a29k-*-sym1*)		bfd_name=a29k-coff strip_underscore=yes ;;
  h8300*-*-*)		bfd_name=h8300-coff strip_underscore=yes ;;
  h8500-*-*)		bfd_name=h8500-coff strip_underscore=yes ;;
  sh-*-*)		bfd_name=sh-coff strip_underscore=yes ;;
  hppa*-*-*elf*)	bfd_name=hppa-elf ;;
  hppa*-*-bsd*)		bfd_name=hppabsd ;;
  hppa*-*-hpux*)	bfd_name=hppahpux ;;
  hppa*-*-hiux*)	bfd_name=hppahpux ;;
  hppa*-*-osf*)		bfd_name=hppaosf ;;
  i[345]86-*-sysv4*)	bfd_name=i386-elf ;;
  i[345]86-*-unixware)	bfd_name=i386-elf ;;
  i[345]86-*-solaris2*)	bfd_name=i386-elf ;;
  i[345]86-*-sysv*)	bfd_name=i386-coff ;;
  i[345]86-*-isc*)	bfd_name=i386-coff ;;
  i[345]86-*-sco*)	bfd_name=i386-coff ;;
  i[345]86-sequent-bsd*) bfd_name=i386-dynix strip_underscore=yes ;;
  i[345]86-*-bsd*)	bfd_name=i386-bsd strip_underscore=yes ;;
  i[345]86-*-coff)	bfd_name=i386-coff ;;
  i[345]86-*-aix*)	bfd_name=i386-coff ;;
  i[345]86-*-elf)	bfd_name=i386-elf ;;
  i[345]86-*-netbsd*)	bfd_name=i386-nbsd strip_underscore=yes ;;
  i[345]86-*-netware*)	bfd_name=i386-nlm ;;
  i[345]86-*-linux*)	bfd_name=i386-linux strip_underscore=yes ;;
  i[345]86-*-lynxos*)	bfd_name=i386-lynx ;;
  i[345]86-*-gnu*)	bfd_name=i386-mach3 strip_underscore=yes ;;
  i[345]86-*-mach*)	bfd_name=i386-mach3 strip_underscore=yes ;;
  i[345]86-*-osf1mk*)	bfd_name=i386-mach3 strip_underscore=yes ;;
  i[345]86-*-os9k)	bfd_name=i386-os9k ;;
  i[345]86-none-*)	bfd_name=i386-coff ;;
  i960-*-vxworks4*)	bfd_name=i960-bout strip_underscore=yes ;;
  i960-*-vxworks5.0)	bfd_name=i960-bout strip_underscore=yes ;;
  i960-*-vxworks5.*)	bfd_name=i960-coff strip_underscore=yes ;;
  i960-*-vxworks*)	bfd_name=i960-bout strip_underscore=yes ;;
  i960-*-aout*)		bfd_name=i960-bout strip_underscore=yes ;;
  i960-*-bout*)		bfd_name=i960-bout strip_underscore=yes ;;
  i960-*-coff*)		bfd_name=i960-coff strip_underscore=yes ;;
  i960-*-nindy*)	bfd_name=i960-bout strip_underscore=yes ;;
  m68*-apollo-*)	bfd_name=apollo ;;
  m68*-bull-sysv*)	bfd_name=u68k-coff ;;
  m68*-hp-bsd*)		bfd_name=hp300bsd strip_underscore=yes ;;
  m68*-*-aout*)		bfd_name=m68k-0aout strip_underscore=yes ;;
  m68*-*-coff*)		bfd_name=m68k-coff ;;
  m68*-*-hpux*)		bfd_name=hp300hpux strip_underscore=yes ;;
  m68*-*-lynxos*)	bfd_name=m68k-lynx ;;
  m68*-*-os68k*)	bfd_name=m68k-aout strip_underscore=yes ;;
  m68*-*-sunos*)	bfd_name=m68k-aout strip_underscore=yes ;;
  m68*-*-sysv4*)	bfd_name=m68k-elf ;;
  m68*-*-sysv*)		bfd_name=m68k-coff ;;
  m68*-*-vxworks*)	bfd_name=m68k-aout strip_underscore=yes ;;
  m68*-ericsson-*)	bfd_name=m68k-ose strip_underscore=yes ;;
  m68*-netx-*)		bfd_name=m68k-aout strip_underscore=yes ;;

  m88*-harris-cxux*)	bfd_name=m88k-elf ;;
  # DGUX used to use COFF, but now (Jan 94) I believe it uses ELF by default.
  m88*-*-dgux*)		bfd_name=m88k-elf ;;
  m88*-*-mach3*)	bfd_name=m88k-mach3 ;;
  m88*-*-sysv4*)	bfd_name=m88k-elf ;;
  m88*-*-*)		bfd_name=m88k-coff strip_underscore=yes ;;

  mips*-big-*)		bfd_name=bigmips ;;
  mips*-dec-bsd*)       bfd_name=mipsdecbsd strip_underscore=yes ;;
  mips*-dec-mach3*)     bfd_name=mips-mach3 ;;
  mips*-dec-*)		bfd_name=decstation ;;
  mips*el-*-ecoff*)	bfd_name=decstation ;;
  mips*-*-ecoff*)	bfd_name=bigmips ;;
  mips*-*-irix5*)	bfd_name=mipsbelf ;;
  mips*-sgi-*)		bfd_name=bigmips ;;
  mips*-*-mach3*)	bfd_name=mips-mach3 ;;
  mips*-*-sysv4*)	bfd_name=mipsbelf ;;
  mips*-*-sysv*)	bfd_name=riscos ;;
  mips*-*-riscos*)	bfd_name=riscos ;;
  mips*-*-bsd*)		bfd_name=bigmips ;; # Sony News
  mips*el-*-elf*)	bfd_name=mipslelf ;;
  mips*-*-elf*)		bfd_name=mipsbelf ;;
  ns32k-pc532-mach*)	bfd_name=pc532-mach strip_underscore=yes;;
  ns32k-*-netbsd*)	bfd_name=ns32k-nbsd strip_underscore=yes;;
  powerpc-*-aix*)	bfd_name=rs6000 ;;
  powerpc-*-elf*)	bfd_name=ppc-elf ;;
  powerpc-*-sysv4*)	bfd_name=ppc-elf ;;
  powerpc-*-netware*)	bfd_name=ppc-nlm ;;
  rs6000-*-*)		bfd_name=rs6000 ;;
  sparc-*-lynxos*)	bfd_name=sparc-lynx ;;
  sparc-*-netbsd*)	bfd_name=sparc-nbsd strip_underscore=yes;;
  sparc-*-solaris2*)	bfd_name=sparc-elf ;;
  sparc-*-sysv4*)	bfd_name=sparc-elf ;;
  sparc64-*-aout*)	bfd_name=sparc-aout strip_underscore=yes ;;
  sparc64-*-elf*)	bfd_name=sparc64-elf ;;
  sparc-*-netware*)	bfd_name=sparc-nlm ;;
  sparc*-*-coff*)	bfd_name=sparc-coff ;;
  sparc*-*-*)		bfd_name=sparc-aout strip_underscore=yes ;;
  tahoe-*-*)		bfd_name=tahoe strip_underscore=yes ;;
  vax-*-vms*)		bfd_name=vax-vms ;;
  vax-*-*)		bfd_name=vax strip_underscore=yes ;;
  we32k-*-*)		bfd_name=we32k ;;
  z8k*-*-*)		bfd_name=z8k-coff strip_underscore=yes ;;

  *-*-aout*)		bfd_name=${cpu}-aout strip_underscore=yes ;;
  *-*-bsd*)		bfd_name=${cpu}-aout strip_underscore=yes ;;
  *-*-netware*)		bfd_name=${cpu}-nlm ;;
  *-*-sysv4*)		bfd_name=${cpu}-elf ;;
  *-*-solaris2*)	bfd_name=${cpu}-elf ;;
  *-*-vsta*)		bfd_name=${cpu}-aout strip_underscore=yes ;;
  *-*-go32*)		bfd_name=${cpu}-coff ;;
  *-*-sysv*)		bfd_name=${cpu}-coff ;;

  *-*-aout64*)		bfd_name=${cpu}-aout64 strip_underscore=yes ;;
  *-*-elf64*)		bfd_name=${cpu}-elf64 ;;

  *-adobe-*)		bfd_name=adobe strip_underscore=yes ;;
  *-sony-*)		bfd_name=news strip_underscore=yes ;;
  *-intel-*)		bfd_name=${cpu}-coff ;;
  *-stratus-*)		bfd_name=${cpu}-elf ;;
  *-cbm-*)		bfd_name=${cpu}-elf ;;
  *-ncr-*)		bfd_name=${cpu}-elf ;;
  *-tandem-*)		bfd_name=st2000 ;;

  # Allow targets that config.sub doesn't recognize, like "all".
  *)			bfd_name=$canon ;;
esac

if [ "x$2" = "x_" ]; then
  echo $strip_underscore
else
  echo $bfd_name
fi
